///*
// * Copyright (c) 2022, 2024, Gluon
// *
// * This program is free software: you can redistribute it and/or modify
// * it under the terms of the GNU General Public License as published by
// * the Free Software Foundation, either version 3 of the License, or
// * (at your option) any later version.
// *
// * This program is distributed in the hope that it will be useful,
// * but WITHOUT ANY WARRANTY; without even the implied warranty of
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// * GNU General Public License for more details.
// *
// * You should have received a copy of the GNU General Public License
// * along with this program.  If not, see <http://www.gnu.org/licenses/>.
// *
// * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// * DISCLAIMED. IN NO EVENT SHALL GLUON BE LIABLE FOR ANY
// * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
// * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
// */
//package com.gluonhq.richtextarea.undo;
//
//public abstract class AbstractCommand<T> {
//
//    private boolean disableUndo;
//
//    public void setDisableUndo(boolean disableUndo) {
//        this.disableUndo = disableUndo;
//    }
//
//    public boolean isDisableUndo() {
//        return this.disableUndo;
//    }
//
//    protected abstract void doUndo(T context);
//    protected abstract void doRedo(T context);
//
//    protected void storeContext(T context) {}
//    protected void restoreContext(T context) {}
//    protected void attachContext(T context) {}
//    protected void detachContext(T context) {}
//
//    public final void execute(T context) {
//        detachContext(context);
//        storeContext(context);
//        doRedo(context);
//        attachContext(context);
//    }
//
//    public final void undo(T context) {
//        detachContext(context);
//        doUndo(context);
//        restoreContext(context);
//        attachContext(context);
//    }
//
//    public final void redo(T context) {
//        detachContext(context);
//        restoreContext(context);
//        doRedo(context);
//        attachContext(context);
//    }
//
//}
